                             - 237 -

                    5.  .

              1.   .

     ,  ,   ,  
.         -
,   ,      -
.  ,      5 1/4  
40       MS DOS 2.0       9
 (15          1.2   17 
  ).    512 ,  512   *  9
 * 40  *  2        
360K.         512     MS
DOS.
         ,  -
,   .      
         . 
     "  -   ".
 ,        -
      .   
         -
    ,      
      .
         -
.           , 
     ,      .
 ,      , 
  .        
,        
   ,         .
       -
.   DOS FDISK       
  ( )  .    
     .
         , 
   .    -
   .   BIOS   1-8,
1-9   1-15,     .    -
,           
 /    .   
 0  39    5 1/4 ,    
    .    BIOS  
 ,     .  
 DOS    ,   , -
  ,    0,    
   .
       ( 0,  1)  
 ,    , -
        
MS DOS.         , 
       (-
     ).    -
 ,         -
,             .
,         DOS  IBMBIO.COM  
IBMDOS.COM,       -
          
COMMAND.COM,        -
 .

                             - 238 -

           ,  
  ,      -
  .      -
  ,       DOS,   -
       .   
    ,   .

                             - 239 -

   5.1.1    .

         (FAT)  
         
.        
  FAT.     ,      
    ,     0,
  0,    2 ( 1      
).  ,  FAT   
  .  ,   MS DOS 3.0   FAT  
 16    .    -
  12- ;     16--
 ,     MS DOS.
           
  .      -
  512  (    MS DOS    
512-  ).       , 
   FAT.    ,   
       
    (  500   4K -
 ).      
FAT,   IBM PC:

                    FAT

   160K                1                  1
   180K                1                  1
   320K                2                  2
   360K                2                  2
   1.2M                1                  7
   10M               8                  8
   20M               4                 40

             
,        ,
         .   
   DOS   FAT  ,  
  ,       FAT  -
    .    AT 
  ,          
FAT.    20M     ,
  10M,        . 
   1.2M     1 ,  
        , 
   .
          -
    .    -
         
,        .   
FAT,    , DOS   -
,        .  -
       FAT,       
         .   
,    FAT    FF8H  FFFH.
 ( )    -
  000,    - FF7H.  ,   FF0H 
FF7H   .

                             - 240 -

      3   ,  -
    1 1/2 .      FAT
         -
  . MS DOS    -
 .
      FAT        .
   ,    (. [1.1.5]), 
 2     FFH.      
,    ,   2,   2 
3     .
   MS DOS 3.0     FAT      16 .
         
10M,   ,  4086 .   . 5-1 -
   FAT    .
            
 . MS DOS      
  ,     
   .     -
 ,        -
    ,     FAT.
    FAT    .

    :

1.     1.5.
2.  2     ( ).
3.     ,    12 , 
  12 .

       :

1.  2   .
2.       .

    .

       FAT    , -
    6.   [5.4.2]   ,
    FAT.      12-  ,
       (4    -
),    .    , 
  ,         
     .        16-
,        ,    -
,       ,  
  .

                             - 241 -

100 '''  FAT
110 DEFINT A-Z
120 DATA &H55, &H8B, &HEC, &H1E, &H8B, &H76, &H0C, &H8B
130 DATA &H04, &H8B, &H76, &H0A, &H8B, &H14, &H8B, &H76
140 DATA &H08, &H8B, &H0C, &H8B, &H76, &H06, &H8A, &H1C
150 DATA &H8E, &HD8, &H8B, &HC3, &HBB, &H00, &H00, &HCD
160 DATA &H25, &H59, &H1F, &H5D, &HCA, &H08, &H00
170 DEF SEG = &H1000     '     
180 FOR N = 0 TO 38      ' 39  
190 READ Q: POKE N,Q     '   
200 NEXT                 '
210 READSECTOR = 0       '   1- 
220 BUFFER = &H2000      '   
230 LOGICALNUMBER = 1    '  FAT
240 NUMBERSECTORS = 2    '2   FAT
250 DRIVE = 0            '  A
260 CALL READSECTOR(BUFFER,LOGICALNUMBER,NUMBERSECTORS,DRIVE)
270 '''    
280 DEF SEG = &H2000     ',   FAT
290 CLUSTERNUMBER! = 6   '  6
300 C! = CLUSTERNUMBER!  ' 
310 C! = INT (C!*1.5)    '  1.5  
320 X = PEEK(C!)         ' 2    
330 Y = PEEK(C!+1)       '
340 X$ = HEX$(X): Y$ = HEX$(Y)  '  16- 
350 IF LEN(X$) = 1 THEN X$ = "0"+X$  '  2-
360 IF LEN(Y$) = 1 THEN Y$ = "0"+Y$  '
370 H$ = Y$ + X$         '    
380 '''   
390 IF CLUSTERNUMBER! MOD 2 <> 0 THEN 420  ',  
400 NEXTCLUSTER$ = RIGHT$(H$,3)  ' ,   3 
410 GOTO 430
420 NEXTCLUSYER$ = LEFT$(H$,3)   ' ,  
430 PRINT NEXTCLUSTER$   ' 

    .

     DOS 1CH       ,
    FAT.         DL,  0 =
   , 1 = A,  ..    DX 
   FAT,  CX -     . DS:BX -
   ,    FAT, ..   , -
  ;     [1.1.5].

    .

        FAT   .  -
,       1.5  -
  ,     1      
   .     
 . ,   FAT  , -
  [5.4.2].

                             - 242 -

;---  
BUFFER    DB   1024  DUP(0)  ;   2 

;--- FAT  
          LEA  BX,BUFFER      ;   
          MOV  DX,1           ;  
          MOV  CX,2           ;2 
          MOV  AL,0           ; A
          INT  25H            ; 
          POP  CX             ; 
;---  
          MOV  AX,3           ;   AX
          MOV  CX,AX          ; 
          MOV  DX,AX          ;  
          SHR  DX,1           ;    2
          ADD  CX,DX          ;  
          ADD  BX,CX          ;  
          MOV  DX,[BX]        ; 2    
          TEST AX,1           ;  ?
          JNZ  ODD_CLUSTER    ;,  
          AND  DX,0000111111111111B    ; 
          JMP  SHORT CONTINUE   ;   
ODD_CLUSTER:   MOV  CL,4      ;   
          SHR  DX,CL          ;   12 
CONTINUE:

                             - 243 -

   5.1.2    .

          -
      -    ,     
,  .   -
          
 .       ,     
        .

    .

           
CLUSTERS        .  -
     DRIVENUM,  1 = A, 2 = B  ..   
      
   .

 10 DEFINT A-Z         '  
 20 DRIVENUM = 1       '   
 30 CLUSTERS = 0       ' 
 40 DATA &H55, &H8B, &HEC, &H8B, &H76, &H06, &H8B
 50 DATA &H14, &HB4, &H36, &HCD, &H21, &H8B, &H7E
 60 DATA &H08, &H89, &H1D, &H5D, &HCA, &H04, &H00
 70 DEF SEG = &H1000   ' 
 80 FOR N = 0 TO 20    '  
 90 READ Q: POKE N,Q   '     
100 NEXT               '
110 FREESPACE = 0      '   
120 CALL FREESPACE(CLUSTERS,DRIVENUM)  ' 
130 PRINT "CLUSTERS: ";CLUSTERS   '  

    .

    36H  21H    
  .      DL, 
   .     -
 0,  A - 1    ..      BX 
  , AX -    ,  CX -
   .      
  .       ,    
            2K 
:

   MOV  AH,36H          ; 
   MOV  DL,1            ; A
   INT  21H             ; 
   CMP  BX,2            ;  2  ?
   JL   RUNNING_OUT     ; ,    

                             - 244 -

   5.1.3 /  .

               
.           
,     .   -    
 ,         
     ,   .
   ,       
DOS.        
    .      
              
,     .    "-
"         ,
       ,    
   .

    .

      LOF  (  )    
,    (, ,   -
  - 1. -    128- , -
 ).          
 ,        .    X = LOF(1). 
     64-  -
  ,   #3:

100 OPEN "FILENAME" AS #3   ' 
110 RECORDLEN = 64          '  
120 NUMBREC = LOF(3)/RECORDLEN  '  

    .

   FCB  23H  21H     .
       1 ,     
  .  DS:DX       
 .   .     , 
 AL  FF.      AL  0,  
         FCB
( 33-36).       FCB 
     ,    ;
      14  FCB.   -
        ,    
    .   ,    
   1:

;---  
   LEA  DX,FCB        ;DS:DX   FCB
   MOV  BX,DX         ;   BX
   MOV  CX,1          ;   CX
   MOV  [BX]+14,CX    ;     FCB
   MOV  AH,23H        ;   
   INT  21H           ; 
   MOV  AX,[BX]+33    ;    
   MOV  CX,[BX]+35    ;    

         ,  
 .          
 ,      [5.4.5].    
  ,     -

                             - 245 -

  ,        
,      .
   ,     (file handle)    
,       , 
    ,   
    .      -
      .   
   42H    21H.     AL
  2,     .   BX -
    ,   CX:DX     
    ,        ,
  0    .    .
  DX:AX     , -
       -  ..    
 (DX   ).     
  ,   AX    1,  -
    6,    .  
      ,   -
.   0  AL, CX  DX    .  -
:

;--- 
   LEA  DX,FILE_PATH     ;DS:DX    
   MOV  AL,0             ;  
   MOV  AH,3DH           ;  
   INT  21H              ; 
   JC   OPEN_ERROR       ;  
   MOV  HANDLE,AX        ;  
;---  
   MOV  AH,42H           ;  
   MOV  AL,2             ;    
   MOV  BX,HANDLE        ;   BX
   MOV  CX,0             ;0  CX  DX
   MOV  DX,0             ;
   INT  21H              ; 
   JC   POINTER_ERROR    ;?
   MOV  FSIZE_HIGH,DX    ;  
   MOV  FSIZE_LOW,DX     ;

                             - 246 -

   5.1.4      ,      
  .

              -
.    ,   ,  -
    [5.1.2].  ,  
 ,       
  .          
 -        . , 
  ,     -
 .         
.     .  
   .    ,    ,
     ,       
.

    .

              , 
  [7.2.5].        
  ,     #61.   -
       ,   -
           
,   .

100 ON ERROR GOTO 5000     '  
 .
 .
200 OPEN FNAME$ FOR OUTPUT AS #1  ' 
210 FOR N = 1 TO ARRLEN    '    
220 PRINT #1, ARRAY$(N)    '  
230 NEXT                   '
 .
 .
5000 IF ERR = 61 THEN 5100  ' ?
5100 IF ERR = ...           '  ...
 .
5100 '''   
5110 BEEP: PRINT "Disk full - choose an option:"
5120 PRINT "(A) - Re-edit the file"
5130 PRINT "(B) - Delete some other file from disk"
5140 PRINT "(C) - Use different diskette"
 .       (   )
 .
5500 RESUME

                             - 247 -

    .

       DOS,    ,   
           .   
:

                           

      FCB          15H           AL = 1
      FCB          22H                     AL = 1
      FCB          27H                AL = 1
         40H        /   CX <> BX

            .
     ,   
  .           
           -
     .